package entity

import (
	"fmt"
	"strconv"

	"gorm.io/gorm"
	"shqsoft.cn/pas3ui/base"
)

// JYDWLSZS 经营单位零售中收
type JYDWLSZS struct {
	ID   int     `gorm:"AUTO_INCREMENT;primary_key;column:ID"`
	NY   int     `gorm:"column:NY"`
	EMID int     `gorm:"column:EMID"`
	UTID int     `gorm:"column:UTID"`
	JYDW string  `gorm:"column:JYDW;"`
	XYK  float32 `gorm:"column:XYK"`
	BX   float32 `gorm:"column:BX"`
	LC   float32 `gorm:"column:LC"`
	JJ   float32 `gorm:"column:JJ"`
	GJS  float32 `gorm:"column:GJS"`
	BGX  float32 `gorm:"column:BGX"`
	SHDX float32 `gorm:"column:SHDX"`
	QT   float32 `gorm:"column:QT"`
	DTID int     `gorm:"column:DTID"`
}

// TableName
func (JYDWLSZS) TableName() string {
	return "T_INDI_ZJYW"
}

// BeforeCreate
func (j *JYDWLSZS) BeforeCreate(tx *gorm.DB) (err error) {
	err = tx.Raw("SELECT ID FROM T_Organization  WHERE OrganName=? ", j.JYDW).Row().Scan(&j.UTID)
	if err != nil {
		err = fmt.Errorf("经营单位【%s】在系统中不存在！", j.JYDW)
		return
	}
	//判断是否重复导入
	var count int
	if j.ID == 0 {
		tx.Raw(`SELECT COUNT(*) FROM T_INDI_ZJYW WHERE JYDW=? AND NY=?`, j.JYDW, j.NY).Row().Scan(&count)
		if count > 0 {
			err = fmt.Errorf("经营单位:%s,不能重复导入！", j.JYDW)
			return
		}
	}
	//判断经营单位是否有公共户并且更新EMID
	err = tx.Raw("SELECT EMID FROM V_USER_PUBLIC WHERE UTID=? ", j.UTID).Row().Scan(&j.EMID)
	if err != nil {
		err = fmt.Errorf("经营单位【%s】在系统中不存在公共户！", j.JYDW)
		return
	}

	//判断是否为月末，将系统中的日期转为字符串，然后拼接为2024-01-01的格式，然后将拼接字符串转为日期，获取这个日期的月末，再转为int
	dtid := strconv.Itoa(j.NY)
	dtid = dtid[:4] + "-" + dtid[4:6] + "-01"
	err = tx.Raw("SELECT REPLACE (LAST_DAY(STR_TO_DATE(?, '%Y-%m-%d')),'-','')as dtid;", dtid).Row().Scan(&j.DTID)

	return
}

// BaseParaEF 一个结构
func JYDWLSZSEF() base.EntityFunc {
	return func() interface{} {
		entity := JYDWLSZS{}
		return &entity
	}
}

// BaseParaESF 数组结构体
func JYDWLSZSESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []JYDWLSZS
		return &entities
	}
}

func init() {
	base.DaoPoolObj.Put("JYDWLSZS", base.NewDefaultDao(JYDWLSZSEF(), JYDWLSZSESF(), nil, "my"))
}
